%include 'Macros.inc'
;	Koordiniruet vipolnenie moduley redaktora
;	-----------------------------------------
;
	absolute	80h
Lparam	resb	1
Param	resb	1
	segment data
	segment stack
	times	64	db	0
	segment	code
..start:
	extern Msg1
	extern Msg2
	extern Msg3
	extern Msg4
	extern Msg5
	extern Msg6
	extern Lname0
	extern Lname
	extern Namefile
	extern Lognum
	extern Lf
	extern Pf
	extern Segin
	extern B
	extern Nt
        extern Address
	extern Sector
	extern Zagolovok_Vvoda_Sectora
	extern Spravochnay_stroka

	mov ax,data
	mov es,ax
	mov ax,ds
	mov [es:Segin],ax
;	mov ax,stack
;	mov ss,ax

	call Clear_screen		;������� ������
	xor cx,cx			;��������� CX
	mov cl,[Lparam]			;CL <- ����� ������
	cmp cx,0			;����� �����������?
	jz .M                           ;��
        dec cx				;������� ������ � ����� �����(��������)
        cmp cx,[es:Lname0]              ;����� ����� ������ 81?
	jb .M4                          ;���
        mov ax,data
	mov ds,ax
	Out_str Msg1                    ;����� ��������� ��� ����� > 81
	mov ah,1			;���� �������
	int 21h				; � ����������
	jmp .Exit			;�� ���������� ���������
.M4:	mov [es:Lname],cx               ;�������� � Lname ����� ����� �����
	xor ax,ax
	xor si,si
	mov bx,1
.Next:	mov ax,[Param+bx]               ;���������� ��� �����
	mov [es:Namefile+si],ax		; � Namefile
	inc si
	inc bx
	loop .Next		
	xor bx,bx			;BX <- 0
	mov bl,[es:Lname]		;BX <- ����� ����� �����
	mov [es:Namefile+bx],byte 0	;������ �������� �����
        mov ax,data
	mov ds,ax
	xor ax,ax
	mov ah,3dh			;��������
	mov dx,Namefile			; ��������������
	mov al,2			; �����
	int 21h				; �� ������ � ��� ������
	mov ds,[es:Segin]	
	jnc .M3				;���� �������
	mov ax,data
	mov ds,ax
	Out_str Msg3                    ;����� ��������� �� ���������� �������������� �����
	mov ah,1			;���� �������
	int 21h				; � ����������
	jmp .Exit			;�� ���������� ���������
.M3:	mov [es:Lognum],ax		;���������� �����. ������ �����
        xor cx,cx                       ;�������� ����������� ���������
	xor dx,dx			; ����� - 0
	mov bx,[es:Lognum]			;���������
	mov al,2			; ���������
	mov ah,42h			; �� �����
	int 21h				; �����
	add ax,255			;����� ������� ����� ����� � 255
	adc dx,0			;����� ������� ����� ����� � (CF)
	mov bx,256			;BX <- ����� �������
	div bx				;������� (DX:AX) �� BX
	mov [es:Lf],ax			;Lf <- ����� ����� � ��������
	mov ax,data
	mov ds,ax
	Out_str Msg4                    ;DX <- ����� ������ ��������� ����� ������ �� �����
	mov ds,[es:Segin]
	xor ax,ax	
	xor dx,dx
	mov dx,[es:Lf]			;DX <- ����� ������ ���������
	call Write_word_dec		;����� ������ �� �����
	call Send_crlf                  ;������� ������
        mov ah,1			;���� �������
	int 21h				; � ����������
	mov [es:Pf],byte 1
.M:	call Read_sector
	call Disp_sector
	mov ah,0h
.M1:	call Read_byte
	clc
	cmp al,0h
	jne .M2
	cmp ah,44h
	je .Exit		
	call Command
	clc
	jmp .M2
.Exit:	call Clear_screen
	stc
.M2:	jnc .M1
	mov ax,4c00h
	int 21h
;
;	Interpretator komand
;	--------------------
; Vhodi: AH - skan-kod, sootvetstvuyschii komande
; Chtenie: .Table - tablica perehodov
;
Command:
		push bx
		push cx
		pushf
		push ds
		mov cx,cs
		mov ds,cx
		mov bx,.Table		;BX <- adres tablici
.M1:		cmp byte[bx],0ffh	;Konec tablici?
		je .Exit		;Da, koda net v tablice
		cmp ah,[bx]		;Eto vhod v tablicu?
		je .Dispatch		;Da, vipolnit komandu
		add bx,3		;Net, perehod k
		clc			; sleduyschemu
		jmp .M2			; elementu tablici
.Dispatch: 	inc bx			;Adres proceduri
		call [bx]		;Vizov proceduri
.Exit:		stc			; CF <- 1
.M2:		jnc .M1			;Povtorenie dly novogo elementa tablici
		pop ds
		popf
		pop cx
		pop bx
		ret
; Tablica soderjit skan-kodi upravlyuschih klavish i adresa
; procedur, vipolnyuschih sootvetstvuyuschie komandi
.Table	db	3bh		;<F1>
	dw	Init_sector
	db	3dh		;<F3>
	dw	Next_sector
	db	3eh		;<F4>
	dw	Edit_sector
	db	3fh		;<F5>
	dw	Prev_sector
	db	40h		;<F6>
	dw	N_sector
	db	0ffh		;Konec tablici

%include 'Cursor.asm'
%include 'Video_io.asm'	
%include 'Kbd_io.asm'	
%include 'Disp_sec.asm'
%include 'Edit_sec.asm'


	